package wc.parserUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import wc.parserUtil.stemer.Porter;

public class ParserWords extends Parser {

	private static Pattern _p = Pattern.compile("([\\w\\dа-я]+-[\\w\\dа-я]+)|([\\w\\dа-я]+)");
	private static ArrayList<String> _stopWords = (ArrayList<String>) Arrays.asList(
            "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
            "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "ноль",
            "а", "б", "в", "г", "д", "е", "ж", "з", "й", "и", "к", "л", "м", "н", "о", "п", "р",
            "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "э", "ь", "ы", "ю", "я",
            "без", "более", "бы", "был", "была", "были", "было", "быть", "вам", "вас", "ведь", "весь", "вдоль",
            "вместо", "вне", "вниз", "внизу", "внутри", "во", "вокруг", "вот", "все", "всегда", "всего", "всех",
            "вы", "где", "да", "давай", "давать", "даже", "для", "до", "достаточно", "его", "ее", "если", "есть",
            "еще", "же", "за", "за исключением", "здесь", "из", "из-за", "или", "им", "иметь", "их", "как",
            "как-то", "кто", "когда", "кроме", "кто", "ли", "либо", "мне", "может", "мои", "мой", "мы", "на",
            "навсегда", "над", "надо", "наш", "не", "него", "неё", "нет", "ни", "них", "но", "ну", "об", "однако",
            "он", "она", "они", "оно", "от", "отчего", "очень", "по", "под", "после", "потому", "потому что",
            "почти", "при", "про", "снова", "со", "так", "также", "такие", "такой", "там", "те", "тем", "то",
            "того", "тоже", "той", "только", "том", "тут", "ты", "уже", "хотя", "чего", "чего-то", "чей", "чем",
            "что", "чтобы", "чьё", "чья", "эта", "эти", "это");
	
	private boolean _stopWord;
	private boolean _stemer;
	
	public ParserWords(boolean stopWord, boolean stemer) {
		_stopWord = stopWord;
		_stemer = stemer;
	}
	
	public void parseLine(String s, boolean clear) {
		if(clear) clear();
		s = s.toLowerCase();
		s = s.replace("ё", "е");

        Matcher m = _p.matcher(s);
        Porter porter = new Porter();
        while(m.find()) {
            String word = m.group(0);
            
            boolean stopWord = false;
            if(_stopWord) {
	            for(String stopword : _stopWords) {
	                if(word.toLowerCase().equals(stopword)) {
	                    stopWord = true;
	                }
	            }
            }
            if(stopWord) {
            	continue;
            }
            
            if(_stemer) {
            	word = porter.stem(word);
                addItem(word);
            }
        }
	}
	
}
